<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title> </title>
</head>
<body>
        <script>
            // ES6新的原始数据类型Symbol 它表示独一无二的值,每个Symbol实例都是唯一的
            // 由于是基础数据类型，用typeof检查时，会返回一个属于自己的类型
            const name = Symbol('name')
            const name2 = Symbol('name')
            console.log(name === name2) // false

            // 它通常用于表示私有变量
            // 用途/场景： 可用在标识唯一性ID
            //           作为对象属性名
            //           代替常量
            //           定义类的私有属性/方法 (最大的用途)
            // 用symbol来声明，取值只能用[]，不能用.
            let s1 = Symbol("s1")
            let obj = {}
            obj[s1] = 'hello'
            console.log(obj[s1])
            console.log(Object.keys(obj)) // []

            let s  = Object.getOwnPropertySymbols(obj)
            console.log(s) // [Symbol(s1)]

            // 反射
            let m = Reflect.ownKeys(obj)
            console.log(m)  // [Symbol(s1)]


            let obj2 = Symbol()
            console.log(typeof obj2) // Symbol

        </script>
</body>
</html>
